<?php
/**
 * 分类控制器
 * @author 杨帆
 */
class ClassController extends AuthController{
    private $model;
    /**
     * 自动执行方法，应用的是框架的自动执行方法;
     */
    public function __init(){
        //每次运行控制器都会打开扩展模型'Class';
        $this->model = K('Class');
        
    } 
    /**
     * 显示分类列表
     */
    public function index(){
//     $data = $this->model->all();
       $data = M()->field('*,t.name as tname,c.name as cname')->join('__type__ t JOIN __class__ c on t.tid=c.type_tid')->all();
//      p($data);die; 
       //框架的方法data中有父级分类如果不为pid的话，需要传入参数子集分类cid和父级分类fid;
       $data = Data::tree($data,'cname','cid','fid');
//     p($data);die;
       $this->assign('data',$data);
       $this->display(); 
    }
    /**
     * 分类添加
     */
    public function add(){
        if(IS_POST){
            //执行模型的添加
            if(!$this->model->addData()){
                $this->error($this->model->error);
            }
            $this->success('添加成功',U('index'));
        }
        //类型数据分配；
        $data = M('type')->all();
        $this->assign('data',$data);
        
        //显示模板
        $this->display();
    }
    
    /**
     * 添加子分类
     */
    public function addSon(){
        //如果有数据
        if(IS_POST){
//          p($_POST);die;
            //执行addData方法,当addData方法返回false时,取反"!"为真,证明有错误,输出model的错误值信息;
            if(!$this->model->addData()){
                $this->error($this->model->error);
            }
            $this->success('添加成功',U('index'),0.2);
        }
        //利用Q函数获取get中的cid的值,此值是父级分类的cid,如没有默认为"0",并对获取的数值进行转正整操作;
        $cid = Q('get.cid',0,'intval');
        //获得所属分类
        $cate = M()->field('*,t.name as tname,c.name as cname')->join('__type__ t JOIN __class__ c on t.tid=c.type_tid')->where("c.cid={$cid}")->find();
//      p($cate);die;   
        //分配数据到html页面;
        $this->assign('cate',$cate);
        //显示视图
        $this->display();
    }
    
    
    /**
     * 删除分类
     */
     public function del(){
         //获取元素主键id(cid);
         $cid = Q('get.cid',0,'intval');
         //先判断是否有子分类;
         $sonData = $this->model->where("fid={$cid}")->find();
         if($sonData){
             $this->error('请先删除子分类');
         }
         //删除分类
         $this->model->where("cid={$cid}")->delete();
         //1.提示信息 2.跳转地址 3.跳转时间
         $this->success('删除成功',U('index'),0.2);
     }
     
     /**
      * 编辑分类
      */
    public function edit(){
        //获取元素主键id(cid);
        $cid = Q('get.cid',0,'intval');
        //有数据输入时
        if(IS_POST){
//          p($_POST);die;
            
            //执行editData方法,当editData方法返回false时,取反"!"为真,证明有错误,输出model的错误值信息;
            if(!$this->model->editData($cid)){
                $this->error($this->model->error);
            }
            //编辑成功,提示信息
            $this->success('编辑成功',U('index'));
        }
        //获得旧数据
        $oldData = $this->model->where("cid={$cid}")->find();
//      p($oldData);
        //将旧数据分配到html;
        $this->assign('oldData',$oldData);
        //获得类型数据
        $type = M('type')->all();
        $this->assign('type',$type);
        //处理选择分类（不能是自己和自己的子集）*****
        //获得自己和自己的子集
        $cids = $this->model->sonCids($cid);
        //变成字符串
        $cidStr = implode(',', $cids);
        //处理选择分类（不能是自己和自己的子集）
        $data = $this->model->where("cid NOT IN({$cidStr})")->all();
        //把无限级分类变成树状结构，并且有层次
        $data = Data::tree($data,'name','cid','fid');
        //将新数据分配到html;
        $this->assign('data',$data);
//       p($data);
        //显示视图
        $this->display();
    }
 }
 
 
 
 
 
 
 
 
 
 
 
